﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HomeCare.Control;
using HomeCare.Model;
using HomeCare.View;

namespace HomeCare
{
    public partial class CadastroAgenda : Form
    {
        int id;
        private String acao = String.Empty;

        PessoaControl control = new PessoaControl();
        AgendaControl agendaControl = new AgendaControl();
        public CadastroAgenda()
        {
            InitializeComponent();
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void CadastroAgenda_Load(object sender, EventArgs e)
        {
            CarregaComboPaciente();
            CarregaComboFuncionario();
            BloquearCampos();
            BloquearBotoes();
            LimparCampos();

            //Verifica Acesso aos botoes
            Pessoa pessoa = new Pessoa();
            pessoa.id = PessoaEstatica.ID;
            Tela tela = new Tela();
            tela.id = 9;
            tela.descricao = this.Name;
            VerificaAcesso(pessoa, tela);

        }

        public void BloquearCampos()
        {
            cmbFuncionarios.Enabled = false;
            cmbPacientes.Enabled = false;
            dtpFinal.Enabled = false;
            dtpInicial.Enabled = false;
        }

        public void BloquearBotoes()
        {
            btnAlterar.Enabled = false;
            btnExcluir.Enabled = false;
            btnConfirmar.Enabled = false;
        }

        public void DesbloquearCampos()
        {
            cmbFuncionarios.Enabled = true;
            cmbPacientes.Enabled = true;
            dtpFinal.Enabled = true;
            dtpInicial.Enabled = true;
        }


        public void DesbloquearBotoes()
        {
            btnIncluir.Enabled = true;
            btnAlterar.Enabled = true;
            btnExcluir.Enabled = true;
            btnConsultar.Enabled = true;
            btnConfirmar.Enabled = true;
        }


        public void CarregaComboPaciente()
        {
            List<Pessoa> pessoas = PessoaControl.GetPacientes();
            cmbPacientes.DisplayMember = "nome";
            cmbPacientes.ValueMember = "id";
            cmbPacientes.DataSource = pessoas;
        }

        public void LimparCampos()
        {
            cmbPacientes.SelectedIndex = 0;
            cmbFuncionarios.SelectedIndex = 0;
            dtpInicial.Value = DateTime.Now;
            dtpFinal.Value = DateTime.Now.AddMinutes(30);
        }

        public void CarregaComboFuncionario()
        {
            List<Pessoa> funcionarios = PessoaControl.GetFuncionarios();
            cmbFuncionarios.DisplayMember = "nome";
            cmbFuncionarios.ValueMember = "id";
            cmbFuncionarios.DataSource = funcionarios;
        }

        private void cmbPacientes_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        //private void button1_Click(object sender, EventArgs e)
        //{
        //    string msg = validaInsert();
        //    if (msg == "")
        //    {
        //        Agenda agenda = new Agenda();
        //        agenda.DataInicial = dtpInicial.Value;
        //        agenda.DataFinal = dtpFinal.Value;
        //        agenda.IdFuncionario = Convert.ToInt32(cmbFuncionarios.SelectedValue);
        //        agenda.IdPaciente = Convert.ToInt32(cmbPacientes.SelectedValue);

        //        bool retorno = agendaControl.InsertAgenda(agenda);

        //        if (retorno)
        //            MessageBox.Show("Agenda gravada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
        //        else
        //            MessageBox.Show("Horário agendado já está sendo utilizado", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        //    }
        //    else
        //    {
        //        MessageBox.Show(msg, "Erro de validação", MessageBoxButtons.OK, MessageBoxIcon.Error);
        //    }
        //}

        public string validaInsert()
        {
            String erro = "";
            //if (dtpFinal.Value.Minute != 30 && dtpFinal.Value.Minute != 00)
            //    erro += "Data Final Inválida.\n";
            //if (dtpInicial.Value.Minute != 30 && dtpInicial.Value.Minute != 00)
            //    erro += "Data Inicial Inválida.\n";
            if (cmbPacientes.SelectedIndex == 0)
                erro += "Paciente selecionado inválido.\n";
            if (cmbFuncionarios.SelectedIndex == 0)
                erro += "Funcionário selecionado inválido.\n";
            if (dtpInicial.Value > dtpFinal.Value || dtpInicial.Value == dtpFinal.Value)
                erro += "Data Inicial não pode ser maior ou igual a Data Final.\n";
            return erro;
        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            //string msg = validaInsert();
            //if (msg == "")
            //{
            //    Agenda agenda = new Agenda();
            //    agenda.DataInicial = dtpInicial.Value;
            //    agenda.DataFinal = dtpFinal.Value;
            //    agenda.IdFuncionario = Convert.ToInt32(cmbFuncionarios.SelectedValue);
            //    agenda.IdPaciente = Convert.ToInt32(cmbPacientes.SelectedValue);

            //    bool retorno = agendaControl.InsertAgenda(agenda);

            //    if (retorno)
            //        MessageBox.Show("Agenda gravada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //    else
            //        MessageBox.Show("Horário agendado já está sendo utilizado", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //}
            //else
            //{
            //    MessageBox.Show(msg, "Erro de validação", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //}

            Agenda agenda = new Agenda();
            agenda.Id = id;
            agenda.DataInicial = dtpInicial.Value;
            agenda.DataFinal = dtpFinal.Value;
            agenda.IdFuncionario = Convert.ToInt32(cmbFuncionarios.SelectedValue);
            agenda.IdPaciente = Convert.ToInt32(cmbPacientes.SelectedValue);
            string msg = validaInsert();

            if (String.IsNullOrEmpty(msg))
            {
                switch (acao)
                {
                    case "Incluir":
                        bool retorno = agendaControl.InsertAgenda(agenda);

                        if (retorno)
                            MessageBox.Show("Agenda gravada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        else
                            MessageBox.Show("Horário agendado já está sendo utilizado", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        break;
                    case "Alterar":
                        bool retorno2 = agendaControl.AlteraAgenda(agenda);
                        if (retorno2)
                        {
                            MessageBox.Show("Agenda alterada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            LimparCampos();
                        }
                        else
                        {
                            MessageBox.Show("Erro ao alterar a Agenda", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        break;

                    case "Excluir":
                        bool retorno3 = agendaControl.ExcluiAgenda(agenda);
                        if (retorno3)
                        {
                            MessageBox.Show("Agenda excluida com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            LimparCampos();
                        }
                        else
                        {
                            MessageBox.Show("Erro ao excluir a agenda", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        break;
                }

                BloquearCampos();
                BloquearBotoes();
                LimparCampos();

                //Verifica Acesso aos botoes
                Pessoa pessoa = new Pessoa();
                pessoa.id = 1;
                Tela tela = new Tela();
                tela.id = 9;
                tela.descricao = this.Name;
                VerificaAcesso(pessoa, tela);
            }
            else
                MessageBox.Show(msg, "Erro de validação", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void VerificaAcesso(Pessoa pessoa, Tela tela)
        {
            AcessoControl acessoControl = new AcessoControl();
            DataSet acessoUsuario = acessoControl.VerificaAcesso(pessoa, tela);
            foreach (DataRow row in acessoUsuario.Tables[0].Rows)
            {
                if (row["Inclusao"].ToString() == "S")
                    btnIncluir.Enabled = true;
                if (row["Alteracao"].ToString() == "S")
                    btnAlterar.Enabled = true;
                if (row["Exclusao"].ToString() == "S")
                    btnExcluir.Enabled = true;
                if (row["Consulta"].ToString() == "S")
                    btnConsultar.Enabled = true;
            }
        }

        private void btnConsultar_Click(object sender, EventArgs e)
        {
            BloquearBotoes();

            PesquisarAgenda agenda = new PesquisarAgenda();
            agenda.Show();
        }

        public void RecebeAgenda(Agenda agenda)
        {
            this.Show();
            id = agenda.Id;
            cmbPacientes.SelectedValue = agenda.IdPaciente;
            cmbFuncionarios.SelectedValue = agenda.IdFuncionario;
            dtpFinal.Value = agenda.DataFinal;
            dtpInicial.Value = agenda.DataInicial;
            btnIncluir.Enabled = false;
            btnAlterar.Enabled = true;
            btnExcluir.Enabled = true;
            btnConfirmar.Enabled = false;
        }

        private void btnIncluir_Click(object sender, EventArgs e)
        {
            DesbloquearCampos();
            DesbloquearBotoes();
            LimparCampos();
            btnIncluir.Enabled = true;
            btnExcluir.Enabled = false;
            btnAlterar.Enabled = false;
            btnConfirmar.Enabled = true;
            acao = "Incluir";
        }

        private void btnAlterar_Click(object sender, EventArgs e)
        {
            DesbloquearCampos();
            DesbloquearBotoes();
            btnAlterar.Enabled = true;
            btnConfirmar.Enabled = true;
            //PesquisarAgenda conAgenda = new PesquisarAgenda(this);
            //conAgenda.Show();
            acao = "Alterar";
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            DesbloquearCampos();
            DesbloquearBotoes();
            btnExcluir.Enabled = true;
            btnConfirmar.Enabled = true;

            acao = "Excluir";
            //PesquisarAgenda conAgenda = new PesquisarAgenda(this);
            //conAgenda.Show();
        }
    }
}
